package mysql8学习.高级.第07章_InnoDB数据存储结构存储;

/**
 * Dynamic（mysql默认）和Compressed行格式
 *
 * 行溢出
 * varchar  变长字符  0-65535
 *   但是当创造时  有二个字节保存变长字符长度 0-65533
 *   NULL值的标识占一个字节
 *   一共最多存在65532字节 (如果此字段声明not null 则不用此字节)
 * 通过上面的案例，我们可以知道一个页的大小一般是16KB，也就是16384字节，
 * 而一个 VARCHAR(M)类型的列就最多可以存储 65533 个字节，
 * 这样就可能出现一个页存放不了一条记录，这种现象称为 ""行溢出""
 *
 *  ● 在Compact 和 Redundant 行格式中，对于占用存储空间非常大的列，
 * 在记录的真实数据处只会存储该列的一部分数据，
 * 把剩余的数据分散存储在几个其他的页中进行分页存储，
 * 然后记录的真实数据处用20个字节存储指向这些页的地址
 * (当然这20个字节中还包括这些分散在其他页面中的数据的占用的字节数)，
 * 从而可以找到剩余数据所在的页。
 * 这称为页的扩展，
 * Compact和Redundant两种格式会在记录的真实数据处存储一部分数据
 * (存放768个前缀字节)，
 *
 *
 *  ● Compressed和Dynamic两种记录格式
 * 对于存放在BLOB中的数据采用了完全的行湓出的方式。
 * 在数据页中只存放20个字节的指针(溢出页的地址) ,
 * 实际的数据都存放在Off Page (溢出页)中
 *
 * Compressed行记录格式的另一个功能就是，
 * 存储在其中的行数据会以zib的算法进行压缩，
 * 因此对于BLOB、TEXT、VARCHAR这类大长度类型的数据能够进行非常有效的存储
 *
 *
 */
public class D2_行溢出 {
}